//################################
// 版权所有：鸽子游戏俱乐部
// 系统名称：鸽子游戏俱乐部-移动版
// 文件名称：requestUtil.js
// 创建时间：2016年06月29日
// 创建人员：Lemo
// 功能说明：网络请求工具类
//################################

'use strict';

import CommonFunc from '../common/commonFunc';

export function request(params) {
    var isOk;
    return new Promise((resolve, reject) => {
        var timeoutId = setTimeout(() => reject(new Error('网络请求超时，请稍后重试！')), params.timeout);

        if ( !params.method ) {
            params.method = 'post';
        }
        var type = params.method.toLowerCase();

        var httpType = params.httpType ? params.httpType : 'http';

        var url = params.url.replace(/(^\s*)|(\s*$)/g, "");
        if(url.indexOf('http://') == -1 && url.indexOf('https://') == -1 ){
            url = httpType + '://' + CommonFunc.getServerConfig('server') + '/' + CommonFunc.getServerConfig('context') + '/' + url;
        }
        
        console.log('fetch url--->' + url);
        
        if ( type === 'post' ) {
            var body;
            if ( params.postType === 'json' ) {
                body = JSON.stringify(params.params);
            } 
            else {
                body = params.params;
            }

            fetch(url, {
                method: type,
                headers: {
                  'Accept':'application/json',
                  'Content-type':'application/json;charset=utf-8'
                },
                credentials: 'same-origin',
                body: body,
            })
            .then((response) => {
                if (response.ok) {
                    isOk = true;
                }
                else {
                    isOk = false;
                }
                return response.json();
            })
            .then((responseData) => {
                clearTimeout(timeoutId);
                if (isOk) {
                    resolve(responseData);
                }
                else {
                    reject(responseData);
                }
            })
            .catch((error) => {
                clearTimeout(timeoutId);
                reject(error);
            });
        }
        else {
            fetch(url, {
                method: type,
                headers: {
                  'Accept':'application/json',
                  'Content-type':'application/json'
                },
                credentials: 'same-origin',
            })
            .then((response) => {
                if (response.ok) {
                    isOk = true;
                }
                else {
                    isOk = false;
                }
                return response.json();
            })
            .then((responseData) => {
                clearTimeout(timeoutId);
                if (isOk) {
                    resolve(responseData);
                }
                else {
                    reject(responseData);
                }
            })
            .catch((error) => {
                clearTimeout(timeoutId);
                reject(error);
            });
        }
    });
}